/*
 * Copyright 2012-2013 EZC Group S.A. RCS Luxembourg B140949
 * 
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not
 * use this file except in compliance with the License. You may obtain a copy of
 * the License at
 * 
 * http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 * License for the specific language governing permissions and limitations under
 * the License.
 */
package com.yobidrive.y3.http;

import java.io.IOException;

import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.ResponseHandler;

import com.yobidrive.y3.exceptions.Y3Exception;


/**
 * Base response handler that manages HTTPStatusCode and message.
 * Automatically transform error responses into the corresponding 
 * Y3Exception object.
 * 
 * @author david
 *
 */
public abstract class HttpResponseHandler<T> implements ResponseHandler<T> {

	/**
	 * Generates the appropriate Y3Exception if the HttpResponse is an error.
	 * Y3Exception is embedded in an ClientProtocalException object.
	 * 
	 * @param response
	 * @throws Y3Exception
	 */
	@Override
	public T handleResponse(HttpResponse response) throws ClientProtocolException,
			IOException {
		int statusCode = response.getStatusLine().getStatusCode();
		String reasonCode = response.getStatusLine().getReasonPhrase();
		
		//Handle errors only (>=400)
		if ( statusCode >= 400 ) {
			Y3Exception y3Ex = new Y3Exception(HttpErrorCodeMapper.getY3ErrorCode(statusCode, reasonCode),reasonCode);
			throw new ClientProtocolException(y3Ex);
		}
		
		return null;
	}
		

	
 
}
